// 使用 class 关键字来定义一个类
/**
 * 类中主要包含了两个部分：
 *      属性
 *      方法
 */
class Person {
    /**
     * 直接定义的属性是实例属性，需要通过对象的实例去访问：
     *      const person = new Person();
     *      person.name;
     *
     * 使用 static 开头的属性是静态属性（类属性），可以直接通过类去访问
     *      Person.age
     *
     * readonly 开头的属性表示一个只读的属性无法修改
     */

    // 定义属性
    // readonly name: string = '孙悟空';
    name: string = '孙悟空';

    // 在属性前使用 static 关键字可以定义属性（静态属性）
    // static readonly age: number = 18;
    age: number = 18;

    // 定义方法
    /**
     * 如果方法以 static 开头则方法就是类方法，可以直接通过类去调用
     */
    sayHello() {
        console.log('Hello 大家好！');
    }
}

const per = new Person();

// console.log(per);
// console.log(per.name, per.age);

// console.log(Person.age);
// per.name = 'tom';
// console.log(per.name);

// per.sayHello();

// Person.sayHello();
per.sayHello();
